package com.ht.modules.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ht.modules.system.entity.SysUser;
import com.ht.entity.SysUserCacheInfo;
import com.ht.modules.system.entity.SysUserVo;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户表 服务类
 */
public interface ISysUserService extends IService<SysUser> {

    SysUser getUserByName(String username);

    /**
     * 添加用户和用户角色关系
     */
    void addUserWithRole(SysUser user, String roles);


    /**
     * 修改用户和用户角色关系
     */
    void editUserWithRole(SysUser user, String roles);

    /**
     * 更新身份证信息
     */
    void editIDCardInfo(SysUser user);

    /**
     * 获取用户的授权角色
     */
    List<String> getRole(String username);

    /**
     * 查询用户信息包括 部门信息
     *
     */
    SysUserCacheInfo getCacheUser(String username);

    /**
     * 根据部门Id查询
     */
    Page<SysUserVo> getUserByDepId(Page<SysUserVo> page, String departId, String username);

    /**
     * 根据角色Id查询
     */
    IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username);

    /**
     * 通过用户名获取用户角色集合
     *
     * @param username 用户名
     * @return 角色集合
     */
    Set<String> getUserRolesSet(String username);

    /**
     * 通过用户名获取用户权限集合
     *
     * @param username 用户名
     * @return 权限集合
     */
    Set<String> getUserPermissionsSet(String username);

    /**
     * 根据用户名设置部门ID
     */
    void updateUserDepart(String username, String orgCode);

    /**
     * 添加用户和用户部门关系
     */
    void addUserWithDepart(SysUser user, String selectedParts);

    Page<SysUserVo> list(Page<SysUserVo> page, SysUserVo userVo, String column, String order);

    List<SysUserVo> list(SysUserVo userVo, String column, String order);

    /**
     * 根据部门id获取用户信息Vo
     *
     * @param depId    部门id
     * @param username 用户账号
     * @param realname 真实姓名
     * @return List<SysUserVo>
     */
    List<SysUserVo> queryUserVoByDepId(String depId, String username, String realname);

    /**
     * 根据用户id更新cid
     *
     * @param userId 用户id
     * @param cid    最新的cid
     */
    void updateCidById(String userId, String cid);

    /**
     * 根据用户id获取用户详细信息
     *
     * @param id 用户id
     */
    SysUserVo queryById(String id);

    /**
     * 根据角色roleId获取用户的username字符串逗号拼接
     */
    String getUsernameByRole(String role);

    /**
     * 根据角色编码查询用户列表
     *
     * @param roleCode 角色编码
     */
    List<SysUser> listUserByRoleCode(String roleCode);


    /**
     * 更新头像
     */
    void editAvatar(SysUser user);

    /**
     * 获取未冻结的用户id、姓名、角色
     *
     * @return 未冻结的用户id、姓名、角色
     */
    List<Map<String, String>> getUserWithRole();

    /**
     * 根据角色编码获取对应员工信息
     *
     * @param roleCode 编码
     * @return 用户信息
     */
    List<SysUser> getUsersByRoleCode(String roleCode);

    /**
     * 根据角色编码和部门信息获取对应领导信息
     *
     * @param roleCode 编码
     * @return 用户信息
     */
    List<SysUser> getLeaderByRoleCodeAndDepartId(String roleCode, String departId);


    /**
     * 根据用户ID获取对应角色
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    List<String> getRoleCodeByUserId(String userId);

}
